package com.violet.uaa.server.login.controller;

import cn.hutool.captcha.CaptchaUtil;
import cn.hutool.captcha.CircleCaptcha;
import com.violet.common.response.Result;
import com.violet.uaa.server.login.service.VioletUserDetailsService;
import com.violet.uaa.server.login.vo.ValidateCodeVO;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;
import java.util.UUID;

/**
 * @Author: wqf
 * @Date: 2024/09/02
 * @Description:
 */
@Tag(name = "系统接口", description = "系统接口")
@RequestMapping("/sys")
@RestController
public class SysController {

    @Resource
    private VioletUserDetailsService userDetailsService;

    /**
     * 创建验证码
     * 1.生成uuid，用作redis的key
     * 2.使用相关组件生成文本、答案及图片
     * 3.将(uuid, code)存入redis中
     * 4.将图片及uuid传递给前端
     */
    @Operation(summary = "生成图片验证码")
    @GetMapping("/captchaImage")
    public Result<ValidateCodeVO> createCode() {
        // 生成一个圆圈验证码，设置其大小为100x50，包含4个字符，干扰元素数量为10
        // 生成验证码
        CircleCaptcha circleCaptcha = CaptchaUtil.createCircleCaptcha(100, 50, 4, 10);
        //生成惟一的uuid
        String codeKey = UUID.randomUUID().toString();
        // 提取验证码的值
        String codeValue = circleCaptcha.getCode();
        // 将验证码图像转换为Base64编码
        String imageBase64 = circleCaptcha.getImageBase64();
        // 生成验证码的键，使用当前时间戳以确保唯一性，并设置过期时间为1分钟
        // 存入redis
        userDetailsService.saveImageCode(codeKey, codeValue);
        // 创建ValidCodeVO对象，用于封装验证码的键和包含Base64编码图像的值
        ValidateCodeVO validateCodeVO = new ValidateCodeVO();
        validateCodeVO.setCodeKey(codeKey);
        validateCodeVO.setCodeValue("data:image/png;base64," + imageBase64);
        return Result.succeed(validateCodeVO);
    }


    /**
     * 方法描述: 查询登录用户的完整权限信息
     *
     * @param
     * @return com.violet.common.entity.response.Result<com.violet.uaa.server.login.entity.LoginUser>
     * @author wqf
     * @date 2024/8/31 16:24
     */
    @Operation(summary = "查询登录用户的完整权限信息")
    @GetMapping("/getInfo")
    private String getInfo() {

        return "{\n" +
                "    \"msg\": \"操作成功\",\n" +
                "    \"code\": 200,\n" +
                "    \"permissions\": [\n" +
                "        \"*:*:*\"\n" +
                "    ],\n" +
                "    \"roles\": [\n" +
                "        \"admin\"\n" +
                "    ],\n" +
                "    \"user\": {\n" +
                "        \"createBy\": \"admin\",\n" +
                "        \"createTime\": \"2024-06-30 11:27:11\",\n" +
                "        \"updateBy\": null,\n" +
                "        \"updateTime\": null,\n" +
                "        \"remark\": \"管理员\",\n" +
                "        \"userId\": 1,\n" +
                "        \"deptId\": 103,\n" +
                "        \"userName\": \"admin\",\n" +
                "        \"nickName\": \"若依\",\n" +
                "        \"email\": \"ry@163.com\",\n" +
                "        \"phonenumber\": \"15888888888\",\n" +
                "        \"sex\": \"1\",\n" +
                "        \"avatar\": \"\",\n" +
                "        \"password\": \"$2a$10$7JB720yubVSZvUI0rEqK/.VqGOZTH.ulu33dHOiBE8ByOhJIrdAu2\",\n" +
                "        \"status\": \"0\",\n" +
                "        \"delFlag\": \"0\",\n" +
                "        \"loginIp\": \"119.139.199.112\",\n" +
                "        \"loginDate\": \"2024-08-31T16:04:29.000+08:00\",\n" +
                "        \"dept\": {\n" +
                "            \"createBy\": null,\n" +
                "            \"createTime\": null,\n" +
                "            \"updateBy\": null,\n" +
                "            \"updateTime\": null,\n" +
                "            \"remark\": null,\n" +
                "            \"deptId\": 103,\n" +
                "            \"parentId\": 101,\n" +
                "            \"ancestors\": \"0,100,101\",\n" +
                "            \"deptName\": \"研发部门\",\n" +
                "            \"orderNum\": 1,\n" +
                "            \"leader\": \"若依\",\n" +
                "            \"phone\": null,\n" +
                "            \"email\": null,\n" +
                "            \"status\": \"0\",\n" +
                "            \"delFlag\": null,\n" +
                "            \"parentName\": null,\n" +
                "            \"children\": []\n" +
                "        },\n" +
                "        \"roles\": [\n" +
                "            {\n" +
                "                \"createBy\": null,\n" +
                "                \"createTime\": null,\n" +
                "                \"updateBy\": null,\n" +
                "                \"updateTime\": null,\n" +
                "                \"remark\": null,\n" +
                "                \"roleId\": 1,\n" +
                "                \"roleName\": \"超级管理员\",\n" +
                "                \"roleKey\": \"admin\",\n" +
                "                \"roleSort\": 1,\n" +
                "                \"dataScope\": \"1\",\n" +
                "                \"menuCheckStrictly\": false,\n" +
                "                \"deptCheckStrictly\": false,\n" +
                "                \"status\": \"0\",\n" +
                "                \"delFlag\": null,\n" +
                "                \"flag\": false,\n" +
                "                \"menuIds\": null,\n" +
                "                \"deptIds\": null,\n" +
                "                \"permissions\": null,\n" +
                "                \"admin\": true\n" +
                "            }\n" +
                "        ],\n" +
                "        \"roleIds\": null,\n" +
                "        \"postIds\": null,\n" +
                "        \"roleId\": null,\n" +
                "        \"admin\": true\n" +
                "    }\n" +
                "}";
    }

    /**
     * 方法描述: 查路用户路由信息
     *
     * @param
     * @return com.violet.common.entity.response.Result<com.violet.uaa.server.login.entity.LoginUser>
     * @author wqf
     * @date 2024/8/31 16:24
     */
    @Operation(summary = "查路路由信息")
    @GetMapping("/getRouters")
    private String getRouters() {
        return "{\"msg\":\"操作成功\",\"code\":200,\"data\":[{\"name\":\"System\",\"path\":\"/system\",\"hidden\":false,\"redirect\":\"noRedirect\",\"component\":\"Layout\",\"alwaysShow\":true,\"meta\":{\"title\":\"系统管理\",\"icon\":\"system\",\"noCache\":false,\"link\":null},\"children\":[{\"name\":\"User\",\"path\":\"user\",\"hidden\":false,\"component\":\"system/user/index\",\"meta\":{\"title\":\"用户管理\",\"icon\":\"user\",\"noCache\":false,\"link\":null}},{\"name\":\"Role\",\"path\":\"role\",\"hidden\":false,\"component\":\"system/role/index\",\"meta\":{\"title\":\"角色管理\",\"icon\":\"peoples\",\"noCache\":false,\"link\":null}},{\"name\":\"Menu\",\"path\":\"menu\",\"hidden\":false,\"component\":\"system/menu/index\",\"meta\":{\"title\":\"菜单管理\",\"icon\":\"tree-table\",\"noCache\":false,\"link\":null}},{\"name\":\"Dept\",\"path\":\"dept\",\"hidden\":false,\"component\":\"system/dept/index\",\"meta\":{\"title\":\"部门管理\",\"icon\":\"tree\",\"noCache\":false,\"link\":null}},{\"name\":\"Post\",\"path\":\"post\",\"hidden\":false,\"component\":\"system/post/index\",\"meta\":{\"title\":\"岗位管理\",\"icon\":\"post\",\"noCache\":false,\"link\":null}},{\"name\":\"Dict\",\"path\":\"dict\",\"hidden\":false,\"component\":\"system/dict/index\",\"meta\":{\"title\":\"字典管理\",\"icon\":\"dict\",\"noCache\":false,\"link\":null}},{\"name\":\"Config\",\"path\":\"config\",\"hidden\":false,\"component\":\"system/config/index\",\"meta\":{\"title\":\"参数设置\",\"icon\":\"edit\",\"noCache\":false,\"link\":null}},{\"name\":\"Notice\",\"path\":\"notice\",\"hidden\":false,\"component\":\"system/notice/index\",\"meta\":{\"title\":\"通知公告\",\"icon\":\"message\",\"noCache\":false,\"link\":null}},{\"name\":\"Log\",\"path\":\"log\",\"hidden\":false,\"redirect\":\"noRedirect\",\"component\":\"ParentView\",\"alwaysShow\":true,\"meta\":{\"title\":\"日志管理\",\"icon\":\"log\",\"noCache\":false,\"link\":null},\"children\":[{\"name\":\"Operlog\",\"path\":\"operlog\",\"hidden\":false,\"component\":\"monitor/operlog/index\",\"meta\":{\"title\":\"操作日志\",\"icon\":\"form\",\"noCache\":false,\"link\":null}},{\"name\":\"Logininfor\",\"path\":\"logininfor\",\"hidden\":false,\"component\":\"monitor/logininfor/index\",\"meta\":{\"title\":\"登录日志\",\"icon\":\"logininfor\",\"noCache\":false,\"link\":null}}]}]},{\"name\":\"Monitor\",\"path\":\"/monitor\",\"hidden\":false,\"redirect\":\"noRedirect\",\"component\":\"Layout\",\"alwaysShow\":true,\"meta\":{\"title\":\"系统监控\",\"icon\":\"monitor\",\"noCache\":false,\"link\":null},\"children\":[{\"name\":\"Online\",\"path\":\"online\",\"hidden\":false,\"component\":\"monitor/online/index\",\"meta\":{\"title\":\"在线用户\",\"icon\":\"online\",\"noCache\":false,\"link\":null}},{\"name\":\"Job\",\"path\":\"job\",\"hidden\":false,\"component\":\"monitor/job/index\",\"meta\":{\"title\":\"定时任务\",\"icon\":\"job\",\"noCache\":false,\"link\":null}},{\"name\":\"Druid\",\"path\":\"druid\",\"hidden\":false,\"component\":\"monitor/druid/index\",\"meta\":{\"title\":\"数据监控\",\"icon\":\"druid\",\"noCache\":false,\"link\":null}},{\"name\":\"Server\",\"path\":\"server\",\"hidden\":false,\"component\":\"monitor/server/index\",\"meta\":{\"title\":\"服务监控\",\"icon\":\"server\",\"noCache\":false,\"link\":null}},{\"name\":\"Cache\",\"path\":\"cache\",\"hidden\":false,\"component\":\"monitor/cache/index\",\"meta\":{\"title\":\"缓存监控\",\"icon\":\"redis\",\"noCache\":false,\"link\":null}},{\"name\":\"CacheList\",\"path\":\"cacheList\",\"hidden\":false,\"component\":\"monitor/cache/list\",\"meta\":{\"title\":\"缓存列表\",\"icon\":\"redis-list\",\"noCache\":false,\"link\":null}}]},{\"name\":\"Tool\",\"path\":\"/tool\",\"hidden\":false,\"redirect\":\"noRedirect\",\"component\":\"Layout\",\"alwaysShow\":true,\"meta\":{\"title\":\"系统工具\",\"icon\":\"tool\",\"noCache\":false,\"link\":null},\"children\":[{\"name\":\"Build\",\"path\":\"build\",\"hidden\":false,\"component\":\"tool/build/index\",\"meta\":{\"title\":\"表单构建\",\"icon\":\"build\",\"noCache\":false,\"link\":null}},{\"name\":\"Gen\",\"path\":\"gen\",\"hidden\":false,\"component\":\"tool/gen/index\",\"meta\":{\"title\":\"代码生成\",\"icon\":\"code\",\"noCache\":false,\"link\":null}},{\"name\":\"Swagger\",\"path\":\"swagger\",\"hidden\":false,\"component\":\"tool/swagger/index\",\"meta\":{\"title\":\"系统接口\",\"icon\":\"swagger\",\"noCache\":false,\"link\":null}}]},{\"name\":\"Http://ruoyi.vip\",\"path\":\"http://ruoyi.vip\",\"hidden\":false,\"component\":\"Layout\",\"meta\":{\"title\":\"若依官网\",\"icon\":\"guide\",\"noCache\":false,\"link\":\"http://ruoyi.vip\"}}]}";
    }

}
